package cloud.maque.admin.impl;

import cloud.maque.admin.domain.entity.MqEnumField;
import cloud.maque.admin.mapper.MqEnumFieldMapper;
import cloud.maque.admin.service.MqEnumFieldService;
import cloud.maque.admin.service.MqEnumService;
import cloud.maque.framework.common.exception.BusinessException;
import cloud.maque.framework.common.request.PaginateDataResquest;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * @author zhuyf
 * @date 2023/3/16 21:25
 */
@Service
public class MqEnumFieldServiceImpl extends ServiceImpl<MqEnumFieldMapper, MqEnumField> implements MqEnumFieldService {

    @Autowired
    MqEnumService enumService;

    @Override
    public MqEnumField Save(MqEnumField mqEnumField) {
        if (StrUtil.isEmptyIfStr(mqEnumField.getCreateAt())) {
            mqEnumField.setCreateAt(new Date());
        }
        if (StrUtil.isEmptyIfStr(mqEnumField.getUpdateAt())) {
            mqEnumField.setUpdateAt(new Date());
        }
        saveOrUpdate(mqEnumField);
        return mqEnumField;
    }

    @Override
    public Integer countByGroupId(String groupId) {

        QueryWrapper<MqEnumField> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(MqEnumField::getGroupId, groupId);
        return count(queryWrapper);
    }

    @Override
    public Boolean delete(String fieldId, String tenantId) {
        if (enumService.countByField(fieldId) > 0) {
            throw new BusinessException("字段下面还有字典，不能删除");
        }

        QueryWrapper<MqEnumField> wrapper = new QueryWrapper<>();
        wrapper.lambda().eq(MqEnumField::getFieldId, fieldId);
        wrapper.lambda().eq(MqEnumField::getTenantId, tenantId);
        return remove(wrapper);
    }

    @Override
    public PageInfo<MqEnumField> page(PaginateDataResquest<MqEnumField> pageReq) {

        PageHelper.startPage(pageReq.getPageIndex(), pageReq.getPageSize());
        QueryWrapper<MqEnumField> wrapper = new QueryWrapper<>();

        if (!StrUtil.isEmptyIfStr(pageReq.getData().getFieldName())) {
            wrapper.lambda().and(q -> {
                q.like(MqEnumField::getFieldName, pageReq.getData().getFieldName());
                q.or();
                q.like(MqEnumField::getFieldCode, pageReq.getData().getFieldName());
            });
        }

        if (!StrUtil.isEmptyIfStr(pageReq.getData().getFieldCode())) {
            wrapper.lambda().like(MqEnumField::getFieldCode, pageReq.getData().getFieldCode());
        }

        if (!StrUtil.isEmptyIfStr(pageReq.getData().getGroupId()) && !pageReq.getData().getGroupId().equals("0")) {
            wrapper.lambda().eq(MqEnumField::getGroupId, pageReq.getData().getGroupId());
        }


        if (!StrUtil.isEmptyIfStr(pageReq.getData().getTenantId())) {
            wrapper.lambda().eq(MqEnumField::getTenantId, pageReq.getData().getTenantId());
        }

        wrapper.lambda().orderByAsc(MqEnumField::getFieldOrder);
        wrapper.lambda().orderByAsc(MqEnumField::getFieldId);
        List<MqEnumField> lists = this.baseMapper.selectList(wrapper);
        PageInfo<MqEnumField> pageInfo = new PageInfo<>(lists);

        return pageInfo;
    }


}
